package com.tange.ai.iot.client.gnssa.utils

import android.content.ContentValues
import android.content.Context
import android.media.MediaScannerConnection
import android.net.Uri
import android.os.Build
import android.os.Environment
import android.provider.MediaStore
import java.io.File
import java.io.FileInputStream

object MediaSaver {

    /**
     * 保存 MP4 文件到相册
     *
     * @param context 上下文
     * @param mp4File 要保存的 MP4 文件
     * @param folderName 自定义相册文件夹名称（可选）
     * @return 保存后的 Uri，失败返回 null
     */
    fun saveMp4ToGallery(context: Context, mp4File: File, folderName: String? = null): Uri? {
        if (!mp4File.exists() || !mp4File.isFile) {
            return null
        }

        val contentResolver = context.contentResolver
        val collection = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
        } else {
            MediaStore.Video.Media.EXTERNAL_CONTENT_URI
        }

        val contentValues = ContentValues().apply {
            put(MediaStore.Video.Media.DISPLAY_NAME, mp4File.name)
            put(MediaStore.Video.Media.MIME_TYPE, "video/mp4")
            put(MediaStore.Video.Media.DATE_ADDED, System.currentTimeMillis() / 1000)
            put(MediaStore.Video.Media.DATE_TAKEN, System.currentTimeMillis())
            put(MediaStore.Video.Media.IS_PENDING, 1)

            // 设置自定义文件夹（Android 10+）
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && !folderName.isNullOrEmpty()) {
                put(
                    MediaStore.Video.Media.RELATIVE_PATH,
                    "${Environment.DIRECTORY_MOVIES}/$folderName"
                )
            }
        }

        return try {
            val uri = contentResolver.insert(collection, contentValues) ?: return null
            contentResolver.openOutputStream(uri)?.use { outputStream ->
                FileInputStream(mp4File).use { inputStream ->
                    inputStream.copyTo(outputStream)
                }
            }

            // 标记为已完成
            contentValues.clear()
            contentValues.put(MediaStore.Video.Media.IS_PENDING, 0)
            contentResolver.update(uri, contentValues, null, null)

            // 触发媒体扫描（Android 9 及以下）
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
                MediaScannerConnection.scanFile(
                    context,
                    arrayOf(mp4File.absolutePath),
                    arrayOf("video/mp4"),
                    null
                )
            }

            uri
        } catch (e: Exception) {
            e.printStackTrace()
            null
        }
    }
}